package com.niit.scala

/**
 * Date:2025/3/12
 * Author：Ys
 * Description:
 */
object Base04  {

  def main(args: Array[String]): Unit = {
    //1.方法的调用
    //1.1 后缀调用法 对象名.方法名(参数)
    // 求 -1 的  绝对值
    var i = Math.abs(-1)
    println(i)

    //1.2中缀调用法 对象名 方法名 参数
    //在Scala中所有的操作符都是方法，操作符是一个方法名 也是符号 + - * /
    var v = 1 to 10
    var abs = Math abs -1
    var s = 1 + 1

    //1.3 花括号调用法  方法只有一个参数时才能使用花括号调用法
    i = Math.abs {
      -1
    }

    //1.4无括号调用法。如果方法没有参数，可以省略方法后面的括号
    sayHello

    //2. 函数   格式 ： val/var 函数变量名 = (参数名:参数类型,参数名：参数类型)=>函数体
    /*
        函数是一个对象，类似于方法。函数也有参数列表和返回值的
        函数的定义不需要使用def关键字进行声明
        无需指定返回类型
     */
    //定义两个整数的和 的函数
    var sum = (a:Int,b:Int)=> a+b
    val res = sum(10,20)

    /*

      方法和函数的区别：
        方法属于类或者对象，在运行的时候会加载到JVM的方法区中
        可以将函数对象赋值给一个变量，在运行时会加载到JVM的堆内存中
        函数是一个对象，继承于FunctionN，函数对象有apply,curried,toString，tupled这些方法。
         结论： 在Scala中，函数是对象，而方法是属于对象的，可以理解为：方法归属于函数。函数必须要有返回值
           函数 > 方法
     */
    //3.方法转换为函数  val/var 变量名 = 方法名 _   使用 _就可以将方法转换为函数
    var a= add _
    var aa = a(1,2)
    println(aa)
  }

  def add(a:Int,b:Int):Int={
    a+b
  }

   def sayHello()={
     println("hello")
   }
}
